

import request from "./axios";

/**
 * GET请求封装
 * @param url 请求地址
 * @param params 查询参数对象
 * @param headers 请求头
 * @returns Promise<T> 返回泛型类型T的Promise
 */
export function get(url: string, params: Record<string, unknown> = {}) {
  return request({
    url,
    method: 'get',
    params: params,
    // headers: headers 
  })
}

/**
 * POST表单提交封装
 * 自动将数据转换为URLSearchParams格式，适用于表单提交
 * @param url 请求地址
 * @param data 表单数据对象
 * @param headers 请求头
 * @returns Promise<T> 返回泛型类型T的Promise
 */
export function postForm(url: string, data: Record<string, any> = {}, headers: Record<string, unknown> = {}) {

  // 如果已经是URLSearchParams格式则直接使用，否则转换为表单格式
  const body = data instanceof URLSearchParams ? data : new URLSearchParams(data as any);

  return request({
    url,
    method: 'post',
    data: body,
    headers: {
      ...headers,
      "Content-Type": "application/x-www-form-urlencoded"
    }
  })
}

/**
 * POST JSON数据提交封装
 * 用于提交JSON格式的数据，如用户信息、业务数据等
 * @param url 请求地址
 * @param data JSON数据对象
 * @param headers 请求头
 * @returns Promise<T> 返回泛型类型T的Promise
 */
export function postCollect(url: string, data: Record<string, unknown> = {}, headers: Record<string, unknown> = {}) {
  return request({
    url,
    method: 'post',
    data: data,
    headers: {
      ...headers,
      "Content-Type": "application/json;charset=utf-8"
    }
  })
}

/**
 * PUT请求封装
 * 用于更新资源，如修改用户信息、更新业务数据等
 * @param url 请求地址
 * @param data 要更新的数据对象
 * @param headers 请求头
 * @returns Promise<T> 返回泛型类型T的Promise
 */
export function put(url: string, data = {}, headers = {}) {
  return request({
    url,
    method: 'put',
    data: data,
    headers: headers,
  })
}

/**
 * DELETE请求封装
 * 用于删除资源，如删除用户、删除业务数据等
 * @param url 请求地址
 * @param params 查询参数对象
 * @param headers 请求头
 * @returns Promise<T> 返回泛型类型T的Promise
 */
export function del(url: string, params = {}, headers = {}) {
  return request({
    url,
    method: 'delete',
    params: params,
    headers: headers
  })
}